package net.hn.hnms.biz.process.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.hn.hnms.biz.process.domain.ShiftTurnoverPo;
import net.hn.hnms.biz.process.domain.vo.ShiftTurnoverExportVo;
import net.hn.hnms.biz.process.domain.vo.ShiftTurnoverVo;
import net.hn.hnms.biz.process.mapper.ShiftTurnoverMapper;
import net.hn.hnms.biz.process.service.ShiftTurnoverService;
import net.hn.hnms.sys.common.core.constant.Constants;
import net.hn.hnms.sys.common.core.exception.HuaNengException;
import net.hn.hnms.sys.common.core.utils.DateUtils;
import net.hn.hnms.sys.common.core.utils.StringUtils;
import net.hn.hnms.sys.common.mybatis.core.page.PageQuery;
import net.hn.hnms.sys.common.mybatis.core.page.TableDataInfo;
import net.hn.hnms.sys.system.api.RemoteUserService;
import net.hn.hnms.sys.system.api.model.UserVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 生产管理-交接班台账(ShiftTurnover)表服务实现类
 *
 * @author Wanglong
 * @since 2022-07-25 15:15:05
 */
@Service
public class ShiftTurnoverServiceImpl implements ShiftTurnoverService {

    @Resource
    private ShiftTurnoverMapper shiftTurnoverMapper;

    @Resource
    private RemoteUserService remoteUserService;

    /**
     * 功能描述: 批量删除
     *
     * @param idList
     * @return void
     * @auther: WangLong
     * @date: 2022/7/27 9:47
     */

    @Override
    public Boolean delList(List<String> idList) {
        int i = shiftTurnoverMapper.deleteBatchIds(idList);
        if (i == idList.size()) {
            return true;
        }
        return false;
    }

    /**
     * 功能描述: 条件分页查询交接班台账列表
     *
     * @param pageQuery
     * @param shiftTurnoverVo
     * @return net.hn.hnms.sys.common.mybatis.core.page.TableDataInfo<net.hn.hnms.biz.process.domain.vo.ScglShiftTurnoverVo>
     * @auther: WangLong
     * @date: 2022/7/29 13:48
     */

    @Override
    public TableDataInfo<ShiftTurnoverPo> pageList(PageQuery pageQuery, ShiftTurnoverVo shiftTurnoverVo) {
        String format = "2022-01-01";
        if (shiftTurnoverVo.getHandoverTime()!=null) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
             format = simpleDateFormat.format(shiftTurnoverVo.getHandoverTime());
        }
        try {
            Date startdate = DateUtils.parseDate(format+" 00:00:00", "yyyy-MM-dd HH:mm:ss");
            Date endDate = DateUtils.parseDate(format+" 23:59:59", "yyyy-MM-dd HH:mm:ss");
            Page<ShiftTurnoverPo> shiftTurnoverPage = shiftTurnoverMapper.selectPage(pageQuery.build(), new LambdaQueryWrapper<ShiftTurnoverPo>()
                    // 班次
                    .eq(StringUtils.isNotBlank(shiftTurnoverVo.getCurrentShiftId()), ShiftTurnoverPo::getCurrentShiftId, shiftTurnoverVo.getCurrentShiftId())
                    // 接班人员
                    .like(StringUtils.isNotBlank(shiftTurnoverVo.getSignInPersonId()), ShiftTurnoverPo::getSignInPersonName, shiftTurnoverVo.getSignInPersonId())
                    // 交班人员
                    .like(StringUtils.isNotBlank(shiftTurnoverVo.getSignOutPersonId()), ShiftTurnoverPo::getSignOutPersonName, shiftTurnoverVo.getSignOutPersonId())
                    // 安全情况
                    .like(StringUtils.isNotBlank(shiftTurnoverVo.getCurrentSituation()), ShiftTurnoverPo::getCurrentSituation, shiftTurnoverVo.getCurrentSituation())
                    // 存在的问题
                    .like(StringUtils.isNotBlank(shiftTurnoverVo.getCurrentProblem()), ShiftTurnoverPo::getCurrentProblem, shiftTurnoverVo.getCurrentProblem())
                    // 交接班时间
                    .between(shiftTurnoverVo.getHandoverTime() != null, ShiftTurnoverPo::getHandoverTime, startdate, endDate)
                    //煤矿编码
                    .eq(StringUtils.isNotBlank(shiftTurnoverVo.getMineCode()), ShiftTurnoverPo::getMineCode, shiftTurnoverVo.getMineCode()).
                    orderByDesc(ShiftTurnoverPo::getHandoverTime));

        if (!shiftTurnoverPage.getRecords().isEmpty()) {
            return TableDataInfo.build(shiftTurnoverPage);
        }
        return TableDataInfo.build(new Page<>());
        } catch (ParseException e) {
            throw new HuaNengException(Constants.FAIL, e.getMessage());
        }
    }

    /**
     * 功能描述: 新增交接班数据
     *
     * @param shiftTurnover
     * @return int
     * @auther: WangLong
     * @date: 2022/8/5 8:26
     */

    @Override
    public Boolean add(ShiftTurnoverPo shiftTurnover) {
        Date handoverTime = shiftTurnover.getHandoverTime();
        if (handoverTime == null) {
            //交接班时间
            shiftTurnover.setHandoverTime(new Date());
        }
        //获取接班人员id数组
        String[] inSplit = shiftTurnover.getSignInPersonId().split(",");
        for (String s : inSplit) {
            //设置接班人员名称
            shiftTurnover.setSignInPersonName((StringUtils.isEmpty(shiftTurnover.getSignInPersonName())?"":shiftTurnover.getSignInPersonName()+",")+remoteUserService.getUserById(Long.parseLong(s)).getNickName());
        }
        //获取交班人员id数组
        String[] outSplit = shiftTurnover.getSignOutPersonId().split(",");
        for (String s : outSplit) {
            //设置接班人员名称
            shiftTurnover.setSignOutPersonName((StringUtils.isEmpty(shiftTurnover.getSignOutPersonName())?"":shiftTurnover.getSignOutPersonName()+",")+remoteUserService.getUserById(Long.parseLong(s)).getNickName());
        }
        int insert = shiftTurnoverMapper.insert(shiftTurnover);
        if (insert > 0) {
            return true;
        }
        return false;
    }

    /**
     * 功能描述: 通过主键查询单条数据
     *
     * @param id
     * @return net.hn.hnms.biz.process.domain.ShiftTurnoverPo
     * @auther: WangLong
     * @date: 2022/8/5 8:32
     */

    @Override
    public ShiftTurnoverPo getByIdinfo(String id) {
        ShiftTurnoverPo shiftTurnoverPo = shiftTurnoverMapper.selectById(id);
        if (shiftTurnoverPo == null) {
            throw new HuaNengException(Constants.FAIL, "未查询到该id的详细信息");
        }
        return shiftTurnoverPo;
    }

    /**
     * 功能描述: 修改数据
     *
     * @param shiftTurnover
     * @return boolean
     * @auther: WangLong
     * @date: 2022/8/5 8:35
     */

    @Override
    public boolean updateById(ShiftTurnoverPo shiftTurnover) {
        //获取该条信息
        ShiftTurnoverPo shiftTurnoverPo = shiftTurnoverMapper.selectById(shiftTurnover.getHandoverId());
        if (shiftTurnoverPo == null) {
            throw new HuaNengException(Constants.FAIL, "交接班ID错误" + shiftTurnover.getHandoverId());
        }
        //获取交接班ID(对比交接班ID是否有修改)
        if (!shiftTurnover.getSignOutPersonId().equals(shiftTurnoverPo.getSignOutPersonId())) {
            //不相等就重新读取人员信息保存名称
            shiftTurnover.setSignOutPersonName("");
            //获取交班人员id数组
            String[] outSplit = shiftTurnover.getSignOutPersonId().split(",");
            for (String s : outSplit) {
                //设置接班人员名称
                shiftTurnover.setSignOutPersonName((StringUtils.isEmpty(shiftTurnover.getSignOutPersonName())?"":shiftTurnover.getSignOutPersonName()+",")+remoteUserService.getUserById(Long.parseLong(s)).getNickName());
            }

        }
        //获取接接班ID(对比接接班ID是否有修改)
        if (!shiftTurnover.getSignInPersonId().equals(shiftTurnoverPo.getSignInPersonId())) {
            //不相等就重新读取人员信息保存名称
            shiftTurnover.setSignInPersonName("");

            //获取接班人员id数组
            String[] inSplit = shiftTurnover.getSignInPersonId().split(",");
            for (String s : inSplit) {
                //设置接班人员名称
                shiftTurnover.setSignInPersonName((StringUtils.isEmpty(shiftTurnover.getSignInPersonName())?"":shiftTurnover.getSignInPersonName()+",")+remoteUserService.getUserById(Long.parseLong(s)).getNickName());
            }
        }

        int i = shiftTurnoverMapper.updateById(shiftTurnover);
        if (i > 0) {
            return true;
        }
        return false;
    }

    /**
     * 交接班台账导出数据
     * @return
     */
    @Override
    public List<ShiftTurnoverExportVo> export(ShiftTurnoverVo shiftTurnoverVo) {
        String format = "2022-01-01";
        if (shiftTurnoverVo.getHandoverTime()!=null) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            format = simpleDateFormat.format(shiftTurnoverVo.getHandoverTime());
        }
        try {
            Date startdate = DateUtils.parseDate(format+" 00:00:00", "yyyy-MM-dd HH:mm:ss");
            Date endDate = DateUtils.parseDate(format+" 23:59:59", "yyyy-MM-dd HH:mm:ss");
            List<ShiftTurnoverPo> shiftTurnoverPoList = shiftTurnoverMapper.selectList(new LambdaQueryWrapper<ShiftTurnoverPo>()
                    // 班次
                    .eq(StringUtils.isNotBlank(shiftTurnoverVo.getCurrentShiftId()), ShiftTurnoverPo::getCurrentShiftId, shiftTurnoverVo.getCurrentShiftId())
                    // 接班人员
                    .eq(StringUtils.isNotBlank(shiftTurnoverVo.getSignInPersonId()), ShiftTurnoverPo::getSignInPersonId, shiftTurnoverVo.getSignInPersonId())
                    // 交班人员
                    .eq(StringUtils.isNotBlank(shiftTurnoverVo.getSignOutPersonId()), ShiftTurnoverPo::getSignOutPersonId, shiftTurnoverVo.getSignOutPersonId())
                    // 安全情况
                    .like(StringUtils.isNotBlank(shiftTurnoverVo.getCurrentSituation()), ShiftTurnoverPo::getCurrentSituation, shiftTurnoverVo.getCurrentSituation())
                    // 存在的问题
                    .like(StringUtils.isNotBlank(shiftTurnoverVo.getCurrentProblem()), ShiftTurnoverPo::getCurrentProblem, shiftTurnoverVo.getCurrentProblem())
                    // 交接班时间
                    .between(shiftTurnoverVo.getHandoverTime()!=null,ShiftTurnoverPo::getHandoverTime, startdate,endDate));

            List<ShiftTurnoverExportVo> collect = shiftTurnoverPoList.stream().map(t -> {
                ShiftTurnoverExportVo shiftTurnoverExportVo = new ShiftTurnoverExportVo();
                //交班人员
                shiftTurnoverExportVo.setCurrentShiftId(null);
                //接班人员
                shiftTurnoverExportVo.setSignInPersonId(null);
                //交接班时间
                shiftTurnoverExportVo.setHandoverTime(null);
                //当班安全情况
                shiftTurnoverExportVo.setCurrentSituation(null);
                //当班存在的问题及注意事项
                shiftTurnoverExportVo.setCurrentProblem(null);
                //班次
                shiftTurnoverExportVo.setCurrentShiftId(null);

                return shiftTurnoverExportVo;
            }).collect(Collectors.toList());
            return collect;

        } catch (ParseException e) {
            throw new HuaNengException(Constants.FAIL, e.getMessage());
        }



    }

    /**
     * 根据ID获取用户信息
     * @param id
     * @return
     */
    @Override
    public UserVo getById(String id) {
        UserVo userById = remoteUserService.getUserById(Long.parseLong(id));
        return userById;
    }

}

